import { hasPermission } from "@/utils/hasPermission";

export default {
  //自定义指令有5个钩子函数：bind、inserted、update、componentUpdated、unbind
  //inserted：被绑定元素插入父节点时调用 (仅保证父节点存在，但不一定已被插入文档中)
    inserted: function(el, binding) {
      //el：指令所绑定的元素，可以用来直接操作 DOM
      //binding：一个对象，包含以下 property：
          //value：指令的绑定值，例如：v-my-directive="1 + 1" 中，绑定值为 2。
          //modifiers：一个包含修饰符的对象。例如：v-my-directive.foo.bar 中，修饰符对象为 { foo: true, bar: true }。
        let { value, modifiers } = binding;
        // 通过|分割开的权限,满足任意一种即可. 此处可以自己拓展&来处理[且]的关系,
        // 更复杂的 &| 的关系可以 v-if="hasPerm('a:b') & .. | .." 来实现
        let keys =
            value && value.trim() !== ""
                ? value.split("|")
                : Object.keys(modifiers);
        if (keys && keys.length) {
            let hasAuth = keys.some(key => hasPermission(key));//获取store中的权限列表
            !hasAuth && el.parentNode.removeChild(el);
        }
    }
};
